package com.csh.subject.application.config;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

import java.util.List;

/**
 * 只针对mvc去处理
 * 对返回的 PageResult对象序列化为json的时候，如果result集合为空会报错，对这个问题进行处理
 * @Author: Maverick_Csh
 * @Date: 2024/4/8
 */
@Configuration
public class GlobalConfig extends WebMvcConfigurationSupport {

    @Override
    protected void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        super.configureMessageConverters(converters);
        //添加自定义的消息转换器。以便在Spring MVC中使用该消息转换器来处理返回值的序列化
        converters.add(mappingJackson2HttpMessageConverter());
    }

    /**
     * 自定义mappingJackson2HttpMessageConverter（mvc返回值处理）
     * 目前实现：空值忽略，空字段可返回1
     */
    private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        //Jackson库中的ObjectMapper类
        ObjectMapper objectMapper = new ObjectMapper();
        //设置不强校验
        //序列化对象时，如果对象是空的，是否会抛出异常。将其设置为false表示当对象为空时不会抛出异常，而是会正常序列化为空的对象。
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        //设置只序列化非空字段
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        return new MappingJackson2HttpMessageConverter(objectMapper);
    }

    //    @Override
//    protected void addInterceptors(InterceptorRegistry registry) {
//        registry.addInterceptor(new LoginInterceptor())
//                .addPathPatterns("/**");
//    }
}

